let defaultValue = {} // 子应用的沙箱容器

export class ProxySandbox {
  constructor() {
    this.proxy = null
    this.active()
  }
  // 沙箱激活
  active() {
    // 子应用需要设置属性，拦截到到后 设置到其他容器上
    this.proxy = new Proxy(window, {
      get(target, key) {
        // 绑定事件时，如addEventListener需要指向window 不然会存在问题
        if (typeof target[key] === 'function') {
          return target[key].bind(target)
        }

        return Object.prototype.hasOwnProperty.call(defaultValue, key)
          ? defaultValue[key]
          : target[key]
      },
      set(target, key, value) {
        defaultValue[key] = value
        return true
      }
    })
  }
  // 沙箱销毁
  inactive() {
    defaultValue = {}
  }
}
